﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WinCSharp
{
    public partial class ExtensionsForm : Form
    {
        public ExtensionsForm()
        {
            InitializeComponent();
        }

        private void ExtensionsForm_Load(object sender, EventArgs e)
        {
            string number = "123";
            Console.WriteLine(number.ToInt32ABC());

            int[] intArray = new int[] { 1, 2, 3 };
            intArray = intArray.Slice(1, 2);
            foreach (var i in intArray)
                richTextBox1.Text += i.ToString();
        }
    }

    public static class Extensions
    {
        //声明方式：public static 返回类型 扩展方法名(this 要扩展的类型 sourceObj [,扩展方法参数列表])，
        //与普通方法声明方式不同，扩展方法的第一个参数以this关键字开始，后跟被扩展的类型名，然后才是真正的参数列表。
        public static int ToInt32ABC(this string source)
        {
            return Int32.Parse(source);
        }


        public static T[] Slice<T>(this T[] source, int index, int count)
        {
            if (index < 0 || count < 0 || index + count > source.Length)
            {
                throw new ArgumentException();
            }
            T[] result = new T[count];
            Array.Copy(source, index, result, 0, count);
            return result;
        }
    }
}
